package co.edu.udea.impl;

import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.transaction.annotation.Transactional;

import co.edu.udea.dao.SolicitudDao;
import co.edu.udea.model.Solicitud;
import exceptions.ExecptionRTF;

/**
 * 
 * @author Cristina Isabel Mejia Gonzalez
 *
 */
public class SolicitudImp extends HibernateDaoSupport implements SolicitudDao{

	Logger log = Logger.getLogger(this.getClass());
	
	/**
	 * @param solicitud, Metodo que perite guardar una nueva solicitud
	 * @return devuelve la solicitud si el proceso fue exitoso
	 */
	@Override
	public Solicitud generarSolicitud(Solicitud solicitud)  throws ExecptionRTF {
		try {
			Session session = getSessionFactory().openSession();  
			session.save(solicitud);
			session.flush();
			return solicitud;
		} catch (Exception e) {
			throw new ExecptionRTF(e);
		}
		
	}

	/**
	 * 
	 * @return devuelve el listado de solicitudes con estados pendientes
	 */
	@Override
	public List<Solicitud> obtenerSolicitudesPendientes()  throws ExecptionRTF{
		
		try {
			return getSession().createCriteria(Solicitud.class)
					.add(Restrictions.eq("estadoSolicitud", 1)).list();
			
		} catch (Exception e) {

			log.error("No se pudieron buscar las solicitudes pendientes", e); 
			throw new ExecptionRTF(e);
		}
	}

	/**
	 * @param codigoSolicitud, Metodo que obtiene una solicitud segun su codigo
	 * @return devuelve la solicitud si el proceso fue exitoso
	 */
	@Override
	public Solicitud obtenerSolicitud(String codigoSolicitud)  throws ExecptionRTF{
		try {
			return getHibernateTemplate().get(Solicitud.class, codigoSolicitud);
			
		} catch (Exception e) {

			log.error("No se pudieron encontrar la solicitud con codigo: "+codigoSolicitud, e); 
			throw new ExecptionRTF(e);
		}
	}

}
